package com.cloud.service.impl;

import com.cloud.dao.UserRepository;
import com.cloud.dto.UserDto;
import com.cloud.entity.Project;
import com.cloud.entity.User;
import com.cloud.service.UserService;
import ma.glasnost.orika.MapperFacade;
import org.springframework.beans.BeanUtils;
import com.cloud.dto.TaskDto;
import com.cloud.entity.Task;
import com.cloud.dao.TaskRepository;
import com.cloud.service.TaskServiceI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.relational.repository.query.DtoInstantiatingConverter;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.ArrayList;
import java.util.List;

@Service
@Transactional
public class TaskServiceImpl implements TaskServiceI {
    @Autowired
    TaskRepository taskDao;

    @Autowired
    UserService userService;

    @Autowired
    UserRepository userDao;

    // MapperFacade对象注入
    @Autowired
    private MapperFacade mapperFacade;

    @Override
    public List<TaskDto> findTasksBypId(int p_id){
        List<Task> taskList= taskDao.findTasksBypId(p_id);
        List<TaskDto> taskDto = new ArrayList<>();
        taskDto = mapperFacade.mapAsList(taskList, TaskDto.class);
        return taskDto;
    }

    @Override
    public TaskDto getTaskByTid(int t_id){
        Task task = taskDao.getOne(t_id);
        TaskDto dto = new TaskDto();
        if (task!=null){
            BeanUtils.copyProperties(task,dto);
        }
        return dto;
    }

    @Override
    public List<TaskDto> setTask(List<TaskDto> tasks){
        int k=tasks.size();
        System.out.println(k+"------------------");
        List<TaskDto> taskList=new ArrayList<>();
        for(int i=0;i<k;i++){
            TaskDto task=tasks.get(i);
            System.out.println(i);
            if(task.getUserId() != 0&&task.getTStatus()==0){
                UserDto userDto =userService.getUerById(task.getUserId());
                task.setInfo("未完成");
                task.setUsername(userDto.getName());
            }else if(task.getTStatus()!=0){
                UserDto user=userService.getUerById(task.getUserId());
                task.setInfo("已完成");
                task.setUsername(user.getName());
            }else{
                task.setInfo("未被领取");
                task.setUsername("暂无");
            }
            System.out.println(task);
            taskList.add(task);
        }
        System.out.println(1111);
        return taskList;
    }

    @Override
    public TaskDto addTask(TaskDto taskDto){
        Task task = new Task();
        BeanUtils.copyProperties(taskDto,task);
        Task save = taskDao.save(task);
        BeanUtils.copyProperties(save,taskDto);
        return taskDto;
    }

    @Override
    public List<TaskDto> ClaimTaskList(int p_id){
        List<Task> tasks=taskDao.findTasksBypId(p_id);
        int k=tasks.size();
        List<Task> claimTaskList=new ArrayList<>();
        List<TaskDto> claimTaskDtoList=new ArrayList<>();
        for(int i=0;i<k;i++){
            Task task=tasks.get(i);
            if(task.getUserId()==0){
                claimTaskList.add(task);
            }
        }
        claimTaskDtoList = mapperFacade.mapAsList(claimTaskList, TaskDto.class);
        return claimTaskDtoList;
    }

    @Override
    public TaskDto claimTask(TaskDto task){
        Task task1 = new Task();
        BeanUtils.copyProperties(task,task1);
        Task save = taskDao.save(task1);
        BeanUtils.copyProperties(save,task);
        return task;
    }

    @Override
    public List<TaskDto> MyTaskList(Integer user_id){
        List<TaskDto> taskDto = new ArrayList<>();
        List<Task> taskList=taskDao.findTaskByUserId(user_id);
        taskDto= mapperFacade.mapAsList(taskList,TaskDto.class);
        return taskDto;
    }


    @Override
    public List<TaskDto> TaskInfo(List<TaskDto> MyTaskList){
        List<TaskDto> MyTasks=new ArrayList<>();
        Task task = new Task();
        for(int i=0;i<MyTaskList.size();i++){
            TaskDto taskDto=MyTaskList.get(i);
            if(taskDto.getTStatus()==1){
                taskDto.setInfo("已完成");
            }else {
                taskDto.setInfo("未完成");
            }
            BeanUtils.copyProperties(taskDto,task);
            taskDao.save(task);
            BeanUtils.copyProperties(task,taskDto);
            MyTasks.add(taskDto);
        }
        return MyTasks;
    }

    @Override
    public TaskDto finishTask(TaskDto taskDto){
        Task task = new Task();
        taskDto.setInfo("已完成");
        taskDto.setTStatus(1);
        BeanUtils.copyProperties(taskDto,task);
        task=taskDao.save(task);
        BeanUtils.copyProperties(task,taskDto);
        return taskDto;
    }


//    @Override
//    public List<TaskDto> TaskFile(Integer p_id) {
////        这一段数据库查询语句不会写。。
//       taskDao.TaskFile(p_id);
//        ArrayList<TaskDto> taskDtos = new ArrayList<>();
//        return taskDtos;
//    }

    @Override
    public TaskDto updateUserId(TaskDto taskDto) {
        Task task = new Task();
        BeanUtils.copyProperties(taskDto,task);
        task=taskDao.save(task);
        BeanUtils.copyProperties(task,taskDto);
        return taskDto;
    }

    @Override
    public List<TaskDto> findTask(Integer pid) {
        List<Task> taskList= taskDao.findTask(pid);
        List<TaskDto> taskDto = new ArrayList<>();
        taskDto = mapperFacade.mapAsList(taskList, TaskDto.class);
        return taskDto;
    }
}
